'use strict';
module.exports = (options, app) => {
  return async function(ctx, next) {
    // 拿到不需要验证的token的路由
    const routerAuth = app.config.routerAuth;
    // 获取当前路由
    const url = ctx.url;
    // 判断当前路由是否需要验证token
    const flag = routerAuth.includes(url);
    console.log(`${url}是否在免token白名单中`, flag);
    if (flag) {
      await next();
    } else {
      const { authorization } = ctx.request.header;
	  // if(!authorization)  return ctx.helper.error('该接口需要登录', 401);
      const token = authorization.replace('Bearer ', '');// 把Bearer 截取掉，解析的时候不需要加上Bearer
      if (token) {
        try {
          // const decode = ctx.app.jwt.verify(token, app.config.jwt.secret);// 验证token
          // ctx.state.user = decode;

          const { id } = ctx.app.jwt.verify(token, app.config.jwt.secret);

          const user = await ctx.service.m.user.is_user({ id });
          delete user.password; delete user.paypassword;
          ctx.state.user = user;

        } catch (error) {
          return ctx.helper.error('登录token状态失效，请重新登录', 401);
        }
        // 切记先解析token并存储数据后再执行回调，否则解析数据获取不到x
        await next();
      } else {
        return ctx.helper.error('没有token', 401);
      }
    }


  };
};
